pdf文件中特定词语筛选

 对于pdf文件中的文字进行筛选并计数,文件量太大,且文件内容太多,用python编程实现,前部分是网上找到的pdf读取模块,后部分关键词根据需要进行变动即可。

 ps:表中出现的是特定字符串的索引值,没出现的是-1,如果需要出现了记录1,没出现记录0可以使用df.replace(-1,0),df.mask(df != 0,1)这两句。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams
from io import StringIO
import os
import pandas as pd

class PDFUtils():

    def __init__(self):
        pass

    def pdf2txt(self, path):
        output = StringIO()       #此时output为一个可操作的字符串
        with open(path, 'rb') as f:        # 打开对应path的pdf文件
            praser = PDFParser(f)         #创建pdf的解析器

            doc = PDFDocument(praser)      #创建odf解析后的对象

            if not doc.is_extractable:
                raise PDFTextExtractionNotAllowed

            pdfrm = PDFResourceManager() #pdf共享资源管理器,用于存储共享资源,如字体或图像。

            laparams = LAParams() #参数分析器

            device = PDFPageAggregator(pdfrm, laparams=laparams)#创建一个聚合器 ,并接收PDF资源管理器 、参数分析器作为参数

            interpreter = PDFPageInterpreter(pdfrm, device)#最后创建一个页面解释器 ,将PDF资源管理器和聚合器作为参数

            for page in PDFPage.create_pages(doc):      #获得页面集合
                interpreter.process_page(page)          #使用页面解释器来读取每一页
                layout = device.get_result()             #使用聚合器来获得每一页的内容
                for x in layout:
                    if hasattr(x, "get_text"):     # 需要注意的是在PDF文档中不只有 text 还可能有图片等等,为了确保不出错先判断对象是否具有 get_text()方法 
                        content = x.get_text()     #获得文本信息
                        output.write(content)      #写入之前的stringio对象中

        content = output.getvalue()              #stringio的方法,可以获得字符串内容
        output.close()                            #关闭字符串io
        return content



path = r"C:\Users\Admin\Desktop\年报"
files= os.listdir(path) #得到文件夹下的所有文件名称

#最终表的所有列名
df = pd.DataFrame(columns=('文件名', '关键词_区块链', '关键词_人工智能','关键词_AI','关键词_大数据','关键词_去中心化',
                           '关键词_加密和解密算法','关键词_分布式账本','关键词_智能合约','关键词_共识机制'))

i=0
for file in files: #遍历文件夹
     if not os.path.isdir(file): #判断是否是文件夹,不是文件夹才打开
        pdf_utils = PDFUtils()
        content_str = pdf_utils.pdf2txt(path+"/"+file)  #遍历每个文件内容存储为content_str
        s = pd.Series({'文件名':file,
                   '关键词_区块链':content_str.find('区块链'), 
                   '关键词_人工智能':content_str.find('人工智能'),
                   '关键词_AI':content_str.find('AI'),
                   '关键词_大数据':content_str.find('大数据'),
                   '关键词_去中心化':content_str.find('去中心化'),
                   '关键词_加密和解密算法':content_str.find('加密和解密算法'),
                   '关键词_分布式账本':content_str.find('分布式账本'),
                   '关键词_智能合约':content_str.find('智能合约'),
                   '关键词_共识机制':content_str.find('共识机制')
                  })
        df = df.append(s, ignore_index=True)
        i+=1
        print('完成第{}个,剩余{}个,完成度为{:.2%}'.format(i,len(files),i/len(files)))


df.to_excel("C:/Users/Admin/Desktop/327.xls")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值